home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / XPK / Source / xpkmaster / fault.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-02  |  1.7 KB  |  88 lines

  1. #ifndef XPKMASTER_FAULT_C
  2. #define XPKMASTER_FAULT_C
  3.  
  4. /* Routinesheader
  5.  
  6.     Name:        fault.c
  7.     Main:        xpkmaster
  8.     Versionstring:    $VER: fault.c 1.4 (02.04.97)
  9.     Author:        SDI
  10.     Distribution:    PD
  11.     Description:    Error message generators
  12.  
  13.  1.0   05.10.96 : first real version
  14.  1.1   27.12.96 : added parts of Fault functions
  15.  1.2   28.12.96 : finished the two Fault functions
  16.  1.3   31.03.97 : added new error (XPKERR_UNKNOWN);
  17.  1.4   02.04.97 : renamed to fault.c, removed geterror
  18. */
  19.  
  20. #include <pragma/exec_lib.h>
  21. #include <pragma/dos_lib.h>
  22. #include "xpkmaster.h"
  23. #include "xpk_strings.h"
  24.  
  25. #ifdef __cplusplus
  26.   extern "C"
  27. #endif
  28.  
  29. LONG __asm LIBXpkPrintFault(register __d0 LONG code,
  30. register __a0 STRPTR header)
  31. {
  32.   LONG error;
  33.   STRPTR a[2];
  34.  
  35.   if(code > 0 || code < MINERROR)
  36.     code = XPKERR_UNKNOWN;
  37.  
  38.   a[1] = XpkErrs[-code];
  39.  
  40.   if((a[0] = header))
  41.     error = VPrintf("%s: %s\n", a);
  42.   else
  43.     error = VPrintf("%s\n", &a[1]);
  44.  
  45.   if(error == -1)
  46.     return 0;  /* error */
  47.   else
  48.     return -1; /* ok */
  49. }
  50.  
  51. #ifdef __cplusplus
  52.   extern "C"
  53. #endif
  54.  
  55. ULONG __asm LIBXpkFault(register __d0 LONG code, register __a0 STRPTR header,
  56. register __a1 STRPTR buffer, register __d1 ULONG size)
  57. {
  58.   STRPTR string;
  59.   ULONG hsize = 0, ssize;
  60.  
  61.   if(size <= 1 || !buffer)
  62.     return 0;
  63.  
  64.   if(code > 0 || code < MINERROR)
  65.     code = XPKERR_UNKNOWN;
  66.  
  67.   string = XpkErrs[-code];
  68.  
  69.   if((ssize = strlen(string)) >= size)
  70.     ssize = size - 1;
  71.   size -= ssize + 1;
  72.  
  73.   if(header && (hsize = strlen(header)) + 2 <= size)
  74.   {
  75.     CopyMem(header, buffer, hsize);
  76.     buffer[hsize] = ':';
  77.     buffer[hsize+1] = ' ';
  78.     buffer += hsize + 2;
  79.   }
  80.  
  81.   CopyMem(string, buffer, ssize);
  82.   buffer[ssize] = 0;
  83.  
  84.   return (ssize + hsize);
  85. }
  86.  
  87. #endif /* XPKMASTER_FAULT_C */
  88.